package com.wx.jwt.controller;

import com.wx.jwt.po.User;
import com.wx.jwt.service.UserService;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import static com.wx.jwt.filter.JwtFilter.secret;

/**
 * @author wx
 * @Description: 用户控制层
 * @date 2018/11/27 002711:04
 */
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    /**
     * @description: 新增
     * @author: wx
     * @date: 2018/11/27 0027
     * @param user
     * @return: void
     */
    @PostMapping("/save")
    public void save(@RequestBody User user){
        user.setId(String.valueOf(System.currentTimeMillis()));
        userService.save(user);
    }
    /**
     * @description: 用户登录
     * @author: wx
     * @date: 2018/11/27 0027
     * @param name
     * @param password
     * @return: com.wx.jwt.po.User
     */
    @GetMapping("/getByNameAndPassword")
    public String getByNameAndPassword(String name,String password,HttpServletRequest request){
        User user = userService.getByNameAndPassword(name, password);
        if (user == null){
            return "用户密码或密码错误";
        }
      /*    Jwts.builder()
                .setId(id)                                      // JWT_ID
                .setAudience("")                                // 接受者
                .setClaims(null)                                // 自定义属性
                .setSubject("")                                 // 主题
                .setIssuer("")                                  // 签发者
                .setIssuedAt(new Date())                        // 签发时间
                .setNotBefore(new Date())                       // 失效时间
                .setExpiration(long)                                // 过期时间
                .signWith(signatureAlgorithm, secretKey);           // 签名算法以及密匙*/

        String jwtToken = Jwts.builder().claim("roles", "member").setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, secret).compact();
        //JWT的构成第一部分我们称它为头部（header),第二部分我们称其为载荷（payload, 类似于飞机上承载的物品)，第三部分是签证（signature).
        //header.payload.signature
        return jwtToken;

    }
    /**
     * @description: 测试访问
     * @author: wx
     * @date: 2018/11/27 0027
     * @param 
     * @return: java.lang.String
     */
    @RequestMapping("/list")
    public String loginSuccess() {
        return "Login Successful!";
    }
}
